// setTimeout(()=>{
//   console.log('s1')
//   Promise.resolve().then(()=>{
//     console.log('p1')
//   })
//   Promise.resolve().then(()=>{
//     console.log('p2')
//   })
// })

// setTimeout(()=>{
//   console.log('s2')
//   Promise.resolve().then(()=>{
//     console.log('p3')
//   })
//   Promise.resolve().then(()=>{
//     console.log('p4')
//   })
// })
// // s1
// // p1
// // p2
// // s2
// // p3
// // p4

// 完整的事件环执行顺序
// 1. 从上至下执行所有同步代码
// 2. 执行过程中将遇到的宏任务与微任务添加到相应的队列
// 3. 同步代码执行完毕后，执行满足条件的微任务回调
// 4. 微任务队列执行完毕后执行所有满足需求的宏任务回调
// 5. 重复上述操作，循环事件环操作
// 6. 注意：每执行一个宏任务后就会立刻检查微任务队列

setTimeout(()=>{
  console.log('s1')
  Promise.resolve().then(()=>{
    console.log('p1')
  })
  Promise.resolve().then(()=>{
    console.log('p2')
  })
})

Promise.resolve().then(()=>{
  console.log('p3')
  setTimeout(()=>{
    console.log('s2')
  })
  setTimeout(()=>{
    console.log('s3')
  })
})

// p3
// s1
// p1
// p2
// s2
// s3
